package com.hae.shop.pay;

import com.hae.shop.common.base.Response;
import com.hae.shop.pay.model.reqDto.GetPayTokenReqDto;
import com.hae.shop.pay.model.reqDto.PayReqDto;
import com.hae.shop.pay.model.respDto.PayOrgRespDto;
import com.hae.shop.pay.model.respDto.PayTransactionRespDto;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import io.swagger.annotations.ApiParam;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestParam;

import javax.validation.Valid;
import javax.validation.constraints.NotBlank;
import java.util.List;

/**
 * 支付服务接口
 */
@Api
public interface PayService {

    /**
     * 根据请求生成支付token
     * @param getPayTokenReqDto 支付请求
     * @return
     */
    @ApiOperation("根据请求生成支付token")
    @PostMapping("/getPayToken")
    Response<String> getPayToken(@RequestBody @Valid GetPayTokenReqDto getPayTokenReqDto);


    /**
     * 获取支付机构信息
     * @return
     */
    @ApiOperation("获取支付机构信息")
    @GetMapping("/getPayOrg")
    Response<List<PayOrgRespDto>> getPayOrg();

    /**
     * 根据支付token获取交易信息
     * @param token
     * @return
     */
    @ApiOperation("根据支付token获取交易信息")
    @GetMapping("/getPayTransactionByToken")
    Response<PayTransactionRespDto> getPayTransactionByToken(@NotBlank(message = "支付token不能为空")
                                                             @ApiParam(value = "支付token", required = true, type = "String")
                                                             @RequestParam("token") String token);

    /**
     * 支付订单
     * @param payReqDto 支付订单请求
     * @return
     */
    @ApiOperation("支付订单")
    @PostMapping("/payOrder")
    Response<Boolean> payOrder(@RequestBody @Valid PayReqDto payReqDto);
}
